

package modelos;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.omg.CORBA.PRIVATE_MEMBER;


public class MIngrediente {
	private Conexion conexion;
    private static String Cod_Ingrediente, Des_Ingrediente, estatus;
    private static double disponibilidad;
    
    

    public MIngrediente() {
        super();
        conexion = new Conexion();
    }

    public MIngrediente(String cod_Ingrediente, String des_Ingrediente,
			double disponibilidad) {
		super();
		Cod_Ingrediente = cod_Ingrediente;
		Des_Ingrediente = des_Ingrediente;
		this.disponibilidad = disponibilidad;
	}



	public boolean registrar(){
        conexion.abrirConexion();
        boolean sw = false;
        String sql="INSERT INTO Ingrediente (Cod_Ingrediente, Des_Ingrediente, disponibilidad, estatus) VALUES(?,?,?,?)";
        try {
        	PreparedStatement stam = conexion.getConexion().prepareStatement(sql);
            stam.setString(1, getCod_Ingrediente());
            stam.setString(2, getDes_Ingrediente().toUpperCase());
            stam.setDouble(3, getDisponibilidad());
            stam.setString(4, getEstatus());
            stam.executeUpdate();
            sw = true;
        } catch (SQLException ex) {
            Logger.getLogger(MIngrediente.class.getName()).log(Level.SEVERE, null, ex);
        }        
        conexion.cerrarConexion();
        return sw;
    }

/******************************************************/
    
    public boolean actualizar(){
     conexion.abrirConexion();
     boolean sw = false;
     String sql="UPDATE Ingrediente SET disponibilidad=? WHERE Cod_Ingrediente=?  AND estatus = 'A'";
     try {
    	 PreparedStatement stam = conexion.getConexion().prepareStatement(sql);
    	 stam.setString(2, getCod_Ingrediente());
    	 stam.setDouble(1, getDisponibilidad());
         stam.executeUpdate();
         sw = true;
     } catch (SQLException ex) {
            Logger.getLogger(MIngrediente.class.getName()).log(Level.SEVERE, null, ex);
     }
     conexion.cerrarConexion();
     return sw;
 }

  public boolean  consultar(){
    conexion.abrirConexion();
    boolean sw = false;
    String sql="SELECT * FROM Ingrediente WHERE Cod_Ingrediente=? AND estatus='A'";
    try {
    	PreparedStatement stam = conexion.getConexion().prepareStatement(sql);
    	stam.setString(1, getCod_Ingrediente());
        ResultSet rs= stam.executeQuery();
        if (rs.next()){
            sw = true;
            setDes_Ingrediente(rs.getString("Des_Ingrediente"));
            setCod_Ingrediente(rs.getString("Cod_Ingrediente"));
            setEstatus(rs.getString("estatus"));
            setDisponibilidad(rs.getDouble("disponibilidad"));
         }
    } catch (SQLException ex) {
        Logger.getLogger(MIngrediente.class.getName()).log(Level.SEVERE, null, ex);
    }
    conexion.cerrarConexion();
    return sw;
  }

  public Vector<MIngrediente> listar(){
    Vector<MIngrediente> v = new Vector<MIngrediente>();
    String sql="SELECT * FROM Ingrediente WHERE estatus='A'";
    conexion.abrirConexion();
    try {
        ResultSet rs =conexion.getConexion().createStatement().executeQuery(sql);
        while (rs.next()){
            MIngrediente  i = new MIngrediente();
            i.setDes_Ingrediente(rs.getString("Des_Ingrediente"));
            i.setCod_Ingrediente(rs.getString("Cod_Ingrediente"));
            i.setEstatus(rs.getString("estatus"));
            i.setDisponibilidad(rs.getDouble("disponibilidad"));
            v.add(i);
         }
    } catch (SQLException ex) {
        Logger.getLogger(MIngrediente.class.getName()).log(Level.SEVERE, null, ex);
    }
    conexion.cerrarConexion();
    return v;
  }

  public Vector<String> listarProdcutosVendidos(){
    Vector<String> v = new Vector<String>();
    String sql="select Producto.desc_producto from  Producto,IngredientexProducto,Ingrediente where Ingrediente.estatus='A' and Producto.estatus='A' AND Ingrediente.cod_ingrediente=IngredientexProducto.cod_ingrediente AND Producto.Cod_Producto=IngredientexProducto.Cod_Producto AND Ingrediente.Cod_Ingrediente=?";
    conexion.abrirConexion();
    try {
    	PreparedStatement stmn = conexion.getConexion().prepareStatement(sql);
    	stmn.setString(1, getCod_Ingrediente());
        ResultSet rs= stmn.executeQuery();
        while (rs.next())
            v.add(rs.getString(1));
    } catch (SQLException ex) {
        Logger.getLogger(MIngrediente.class.getName()).log(Level.SEVERE, null, ex);
    }
    conexion.cerrarConexion();
    return v;
  }
  
  public boolean hayDisponibilidad(double cantidad){
      consultar();
      if((getDisponibilidad()-cantidad)>0)
          return true;
      else
          return false;
  }

  public void restarDisponibilidad(){
       conexion.abrirConexion();
       String sql="UPDATE Ingrediente SET disponibilidad=? WHERE cod_ingrediente=?  AND estatus = 'A'";
       try {
    	   PreparedStatement stam = conexion.getConexion().prepareStatement(sql);
           stam.setDouble(1, getDisponibilidad());
           stam.setString(2, getCod_Ingrediente());
           stam.execute();
       } catch (SQLException ex) {
           Logger.getLogger(MIngrediente.class.getName()).log(Level.SEVERE, null, ex);
       }
       conexion.cerrarConexion();
  }
 
 public RecordarIngrediente salvarIngrediente(){
	  return new RecordarIngrediente(MIngrediente.getCod_Ingrediente(),MIngrediente.getDes_Ingrediente(), MIngrediente.getDisponibilidad());
 }
 
 public static void restaurarRecuerdo(RecordarIngrediente recuerdo){
	 recuerdo.getDevolverIngrediente();
	 Cod_Ingrediente = MIngrediente.getCod_Ingrediente();
	 recuerdo.getDevolverIngrediente();
	 Des_Ingrediente = MIngrediente.getDes_Ingrediente();
	 recuerdo.getDevolverIngrediente();
	 disponibilidad = MIngrediente.getDisponibilidad(); 
 }
 
 public int codigoIngrediente(){
	 int codigo=0;
	 conexion.abrirConexion();
	 String sql= "Select cod_ingrediente from Ingrediente";
	 try {
		 PreparedStatement stam = conexion.getConexion().prepareStatement(sql);
		 ResultSet rs= stam.executeQuery();
		 while(rs.next())
			 codigo++;
	 } catch (SQLException ex) {
		 Logger.getLogger(MIngrediente.class.getName()).log(Level.SEVERE, null, ex);
	 }
	 conexion.cerrarConexion();
	 return codigo+1;
 }
 

public static String getCod_Ingrediente() {
	return Cod_Ingrediente;
}

public void setCod_Ingrediente(String cod_Ingrediente) {
	Cod_Ingrediente = cod_Ingrediente;
}

public static String getDes_Ingrediente() {
	return Des_Ingrediente;
}

public void setDes_Ingrediente(String des_Ingrediente) {
	Des_Ingrediente = des_Ingrediente;
}

public String getEstatus() {
	return estatus;
}

public void setEstatus(String estatus) {
	this.estatus = estatus;
}

public static double getDisponibilidad() {
	return disponibilidad;
}

public void setDisponibilidad(double disponibilidad) {
	this.disponibilidad = disponibilidad;
}

 
  
}
